\documentclass{ctexart}
\usepackage{graphicx}
\usepackage{listings}
\usepackage{color}

\pagestyle{headings}

\title{Caculator设计思路和测试说明}
\author{谢飞扬 \\ 信息与计算科学 3210104010}
\date{\today}

\begin{document}
\maketitle
\section{项目设计思路}
一开始的思路比较复杂，想着先用栈把中缀表达式转成后缀表达式，然后再从后往前计算后缀表达式得出结果。但在敲代码过程中突然想到，可以在操作符栈的基础上再增加一个数据栈，从而使代码更简洁高效。\par

核心思路仍然是转后缀表达式。首先遍历输入的字符串，遇到数字则将其转换成double类型压入数据栈，遇到操作符则先弹出操作符栈中优先级大于等于其的操作符，再将其压入操作符栈。在弹出操作符的同时，弹出数据栈的两个数据进行运算，并将结果重新压入数据栈，因为这是是后缀表达式，所以数据栈中最后两个数据与弹出的操作符必然是匹配的。另外设计了一些异常处理，包括除数为0,括号不匹配，错误的符号，重复的符号，缺少符号等。
\begin{lstlisting}
    
\end{lstlisting}
\section{测试说明}
测试了一些基本的浮点运算和表达式异常，包括作业要求中的案例和我自己设计的所有异常处理的测试。分别测试了，缺少左右括号、除数为0、操作符多余、小数点多余、错误符号、缺少符号的异常输入，结果都能正常报错，符合我的设计要求，当然经测试正常的浮点运算也完全正确。经测试各项要求都没有问题，也没有内存泄漏，下面是测试结果的图片。
\begin{figure}[htbp]
  \centering
  \begin{minipage}{12cm}
    \centering
    \includegraphics[width=10cm,height=12cm]  {pic/测试.png}
  \caption{测试算例及测试结果}
  \end{minipage}
\end{figure}

\end{document}
